﻿### IRBIS Query Language

```
from IBIS, PERIO
where dic ("A=ПУШКИН$") and filter (somehow)
order format("@year")
select mfn, record, format("@brief")
limit (100)
```

* **from** -- перечисление баз данных и серверы. База на связанном сервере указывается `SERVER/BASE`. Текущая база данных указывается `@`. Все доступные базы указываются `*`.

* **join** -- соединение двух подзапросов.

* **where** -- условия отбора. Предусмотрено:
  * **dic** -- (быстрый) поиск по словарю,
  * **fulltext** -- полнотекстовый поиск,
  * **filter** -- фильтрация среди отобранных.

* **order** -- упорядочение. Предусмотрено:
  * **format** -- по расформатированным записям,
  * **database** -- имя базы данных,
  * **mfn** -- MFN записи,
  * **version** -- версия записи,
  * **eval** -- результат вычисления выражения,
  * **descending** -- по убыванию.

* **select** -- выдаваемые данные. Можно выбрать:
  * **total** -- количество найденных записей,
  * **database** -- имя базы данных,
  * **mfn** - MFN записи,
  * **version** -- версия записи,
  * **record** -- собственно запись (возможно указание версии в виде `record(-1)`),
  * **eval()** -- результат вычисления выражения.

* **limit** -- ограничения.

* **union** -- объединение запросов.

Примеры:

**1**. Получение количества документов о бетоне в текущей базе.

```
from @
where dic ("K=БЕТОН$")
select total
```

**2**. Получение MFN документов о бетоне, в которых есть поле 300.

```
from @
where dic ("K=БЕТОН$") and filter ("have_field (300)")
select mfn
```
